/**
 * ArtistController
 *
 * 主要职责：
 * - 歌手（Artist）管理接口：新增、编辑、查询、删除、按条件筛选等
 *
 * 关键接口示例：
 * - Response createArtist(ArtistDto dto) -> 创建歌手（可包含头像上传）
 *
 * 依赖项：
 * - IArtistService、MinioService（头像上传）
 *
 * 答辩要点：
 * - 头像文件如何上传与存储（Minio），以及删除歌手时如何处理外部文件
 */
package net.zjitc.yqmusicserver.controller;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import net.zjitc.yqmusicserver.domain.dto.ArtistDTO;
import net.zjitc.yqmusicserver.domain.vo.ArtistDetailVO;
import net.zjitc.yqmusicserver.domain.vo.ArtistVO;
import net.zjitc.yqmusicserver.result.PageResult;
import net.zjitc.yqmusicserver.result.Result;
import net.zjitc.yqmusicserver.service.IArtistService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author 罗翼侨
 * @since 2025/06/16 21:30
 */
@RestController
@RequestMapping("/artist")
public class ArtistController {

    @Autowired
    private IArtistService artistService;

    /**
     * 获取所有歌手列表
     *
     * @param artistDTO artistDTO
     * @return 歌手列表
     */
    @PostMapping("/getAllArtists")
    public Result<PageResult<ArtistVO>> getAllArtists(@RequestBody @Valid ArtistDTO artistDTO) {
        return artistService.getAllArtists(artistDTO);
    }

    /**
     * 获取随机歌手
     * 随机歌手的数量为 10
     *
     * @return 随机歌手列表
     */
    @GetMapping("/getRandomArtists")
    public Result<List<ArtistVO>> getRandomArtists() {
        return artistService.getRandomArtists();
    }

    /**
     * 获取歌手详情
     *
     * @param artistId 歌手id
     * @return 歌手详情
     */
    @GetMapping("/getArtistDetail/{id}")
    public Result<ArtistDetailVO> getArtistDetail(@PathVariable("id") Long artistId, HttpServletRequest request) {
        return artistService.getArtistDetail(artistId, request);
    }

}
